From 43012693cf9b56efee92504016149abee016b2fa Mon Sep 17 00:00:00 2001 From: Yang Hongyang Date: Mon, 13 Jul 2015 16:43:30 +0800 Subject: [PATCH] tools/libxl: check QEMU state before resume dm check QEMU state before resume dm on QEMU_XEN_TRADITIONAL. Signed-off-by: Yang Hongyang CC: Ian Campbell CC: Ian Jackson CC: Wei Liu Acked-by: Ian Campbell Acked-by: Wei Liu --- tools/libxl/libxl_dom_suspend.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/tools/libxl/libxl_dom_suspend.c b/tools/libxl/libxl_dom_suspend.c index a90800dfbf..4cc01ad0fa 100644 --- a/tools/libxl/libxl_dom_suspend.c +++ b/tools/libxl/libxl_dom_suspend.c @@ -375,11 +375,19 @@ static void domain_suspend_callback_common_done(libxl__egc *egc, int libxl__domain_resume_device_model(libxl__gc *gc, uint32_t domid) { + const char *path, *state; switch (libxl__device_model_version_running(gc, domid)) { case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL: { - libxl__qemu_traditional_cmd(gc, domid, "continue"); - libxl__wait_for_device_model_deprecated(gc, domid, "running", NULL, NULL, NULL); + uint32_t dm_domid = libxl_get_stubdom_id(CTX, domid); + + path = libxl__device_model_xs_path(gc, dm_domid, domid, "/state"); + state = libxl__xs_read(gc, XBT_NULL, path); + if (state != NULL && !strcmp(state, "paused")) { + libxl__qemu_traditional_cmd(gc, domid, "continue"); + libxl__wait_for_device_model_deprecated(gc, domid, "running", + NULL, NULL, NULL); + } break; } case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN: -- 2.30.2